home *** CD-ROM | disk | FTP | other *** search
- #include <dos.h>
- #include <stdio.h>
-
- union REGS inregs, outregs;
- struct SREGS segregs;
-
- struct crec {
- void far *asc_rcv_exit;
- short asc_speed;
- unsigned char asc_width ; /* word width */
- unsigned char asc_parity; /* port & parity */
- unsigned char asc_stops; /* number of stop bits */
- } rec;
-
- extern speed;
- extern width;
- extern parity;
- extern n_port;
- extern stop_num;
- extern void rout(void);
-
- pattach(n,pdata,len)
- char far *pdata; /* RQB pointer */
- int n; /* 0-open,1-send,2-close */
- int len; /* length of data */
- {
- unsigned short mask;
- int i, j;
- char far *p;
-
- if ( n == 0) {
-
- rec.asc_rcv_exit = rout;
- rec.asc_speed = speed;
- rec.asc_width = width; /* word length */
- rec.asc_parity = parity ; /* parity yes, even */
- mask = n_port;
- mask = mask << 4;
- rec.asc_parity = rec.asc_parity | mask;
- rec.asc_stops = stop_num; /* 1 stop bit */
-
- /* Open COM1 */
-
- p = &rec;
- inregs.x.dx = FP_OFF( p );
- segregs.ds = FP_SEG( p );
- inregs.h.ah = 0x00;
- inregs.h.al = 0x50;
-
- int86x( 0x6e, &inregs, &outregs, &segregs);
- return;
- } /* open */
- if ( n == 1){
- p = pdata-12;
- i = len + 28;
-
- inregs.x.dx = FP_OFF( p );
- segregs.ds = FP_SEG( p );
- inregs.x.cx = i;
- inregs.h.ah = 0x02;
- int86x( 0x6e, &inregs, &outregs, &segregs);
- return;
- } /* send */
- if ( n == 2){
- inregs.h.ah = 0x01;
- inregs.h.al = n_port;
- int86x( 0x6e, &inregs, &outregs, &segregs);
- } /* close */
- }
-